<!-- 自定义下拉刷新与上拉加载演示(vue) -->
<template>
	<view class="content" style="background-color: gray;">
		<z-paging ref="paging" v-model="dataList" @query="queryList">
			<!-- 需要固定在顶部不滚动的view放在slot="top"的view中，如果需要跟着滚动，则不要设置slot="top" -->
			<!-- 注意！此处的z-tabs为独立的组件，可替换为第三方的tabs，若需要使用z-tabs，请在插件市场搜索z-tabs并引入，否则会报插件找不到的错误 -->
			<template #top>
				<text class="text-h4">下拉刷新、上拉加载</text>
				<text class="text-block">基于 z-paging 实现，当前页面已经包含核心代码，使用的时候调整查询逻辑即可；</text>

				<z-tabs :list="tabList" @change="tabsChange" />
			</template>

			<!-- 自定义下拉刷新view(如果use-custom-refresher为true且不设置下面的slot="refresher"，此时不用获取refresherStatus，会自动使用z-paging自带的下拉刷新view) -->

			<!-- 注意注意注意！！字节跳动小程序中自定义下拉刷新不支持slot-scope，将导致custom-refresher无法显示 -->
			<!-- 如果是字节跳动小程序，请参照sticky-demo.vue中的写法，此处使用slot-scope是为了减少data中无关变量声明，降低依赖 -->
			<template #refresher="{refresherStatus}">
				<!-- 此处的custom-refresh为demo中自定义的组件，非z-paging的内置组件，请在实际项目中自行创建。这里插入什么view，下拉刷新就显示什么view -->
				<!-- <custom-refresher :status="refresherStatus" /> -->
				<text>下拉加载更多</text>
			</template>
			<!-- 自定义没有更多数据view -->
			<template #loadingMoreNoMore>
				<!-- 此处的custom-nomore为demo中自定义的组件，非z-paging的内置组件，请在实际项目中自行创建。这里插入什么view，没有更多数据就显示什么view -->
				<!-- <custom-nomore /> -->
				<text>已经加载完全部数据</text>
			</template>

			<!-- 如果希望其他view跟着页面滚动，可以放在z-paging标签内 -->
			<view class="flex-row" v-for="(item,index) in dataList" :key="index" @click="itemClick(item)">
				<view class="box-body">
					<text class="text-h1">{{item.title}}</text>
					<text class="text-block">{{item.detail}}</text>
				</view>
				<view class="box-right">
					<image src="/static/img/head_01.png" class="sea-circle bg-primary"></image>
				</view>
			</view>
		</z-paging>
	</view>
</template>

<script>
	/**
	 * 下拉刷新上拉加载基础组件
	 * 
	 * 如果后端代码有统一标准，可以将 item 部分作为插槽进行二次封装
	 */
	export default {
		data() {
			return {
				// v-model绑定的这个变量不要在分页请求结束中自己赋值！！！
				dataList: [],
				tabList: ['测试1', '测试2', '测试3', '测试4'],
				tabIndex: 0,
				cnt: 0
			}
		},
		methods: {
			tabsChange(index) {
				this.tabIndex = index;
				//当切换tab或搜索时请调用组件的reload方法，请勿直接调用：queryList方法！！
				//调用reload时参数传true则代表reload时触发下拉刷新效果，不传或false则代表取消此效果
				this.$refs.paging.reload(true);
			},
			queryList(pageNo, pageSize) {
				// 组件加载时会自动触发此方法，因此默认页面加载时会自动触发，无需手动调用
				// 这里的pageNo和pageSize会自动计算好，直接传给服务器即可
				// 模拟请求服务器获取分页数据，请替换成自己的网络请求
				// const params = {
				// 	pageNo: pageNo,
				// 	pageSize: pageSize,
				// 	type: this.tabIndex + 1
				// }
				// this.$request.queryList(params).then(res => {
				// 	// 将请求的结果数组传递给z-paging
				// 	this.$refs.paging.complete(res.data.list);
				// }).catch(res => {
				// 	// 如果请求失败写this.$refs.paging.complete(false);
				// 	// 注意，每次都需要在catch中写这句话很麻烦，z-paging提供了方案可以全局统一处理
				// 	// 在底层的网络请求抛出异常时，写uni.$emit('z-paging-error-emit');即可
				// 	this.$refs.paging.complete(false);
				// })

				const list = [];
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});
				list.push({
					title: 'title',
					detail: 'detail'
				});

				this.cnt++;

				if (this.cnt > 3) {
					// 加载完全部数据的时候，传一个空数组，组件会自动处理
					this.$refs.paging.complete([]);
				} else {
					// 如果能查到数据，正常传递数据即可
					this.$refs.paging.complete(list);
				}
			},
			itemClick(item) {
				console.log('点击了', item.title);
			}
		}
	}
</script>